package t

// 链表
type ListNode struct {
	 Val int
	 Next *ListNode
 }


func MergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
	rs := &ListNode{}
	ls := rs
	cur_l1 := l1
	cur_l2 := l2
	for cur_l1 != nil || cur_l2 != nil {
		if cur_l1 == nil {
			ls.Next = cur_l2
			break
		}
		if cur_l2 == nil {
			ls.Next = cur_l1
			break
		}
		if cur_l1.Val <= cur_l2.Val {
			ls.Next = cur_l1
			cur_l1 = cur_l1.Next
		}else {
			ls.Next = cur_l2
			cur_l2 = cur_l2.Next
		}
		ls = ls.Next
	}
	res := rs.Next

	return res
}

// l1 := t.ListNode{
// Val:  1,
// Next: nil,
// }
// l2 := t.ListNode{
// Val:  2,
// Next: nil,
// }
// l3 := t.ListNode{
// Val:  4,
// Next: nil,
// }
// l2.Next = &l3
// l1.Next = &l2
// r1 := t.ListNode{
// Val:  1,
// Next: nil,
// }
// r2 := t.ListNode{
// Val:  3,
// Next: nil,
// }
// r3 := t.ListNode{
// Val:  4,
// Next: nil,
// }
// r2.Next = &r3
// r1.Next = &r2
//
//
// rs := t.MergeTwoLists(&l1, &r1)
// cur := rs
// for  cur != nil {
// fmt.Println(cur.Val)
// cur = cur.Next
// }
// fmt.Println("结果：", rs)